package org.wupuser.controller;

import jakarta.annotation.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.wupuser.model.DTO.FriendQueryRequest;
import org.wupuser.model.DTO.FriendRequest;
import org.wupuser.service.FriendService;

@RestController
public class FriendController {
	@Resource
	private FriendService friendService;
	
	/**
	 * 根据用户ID查询用户的所有好友信息
	 *
	 * @param userId 用户ID，用于查询该用户的好友列表
	 *
	 * @return 返回ResponseEntity，包含好友查询结果和相应的HTTP状态码
	 */
	@GetMapping("/friend")
	public ResponseEntity<?> queryUsersFriend(@RequestParam String userId) {
		// 调用friendService的方法根据用户ID查询用户的所有好友
		FriendQueryRequest friendQueryRequest = friendService.findUsersAllFriendById(userId);
		// 判断查询结果是否成功
		if (friendQueryRequest.getMessage()
			.equals("查询成功")) {
			// 如果查询成功，返回HTTP状态码200和查询结果
			return ResponseEntity.status(200)
				.body(friendQueryRequest);
		} else {
			// 如果查询失败，返回HTTP状态码404和查询结果
			return ResponseEntity.status(404)
				.body(friendQueryRequest);
		}
	}
	
	/**
	 * 查询好友添加请求的接口方法
	 *
	 * @param userId 用户ID，用于查询该用户的好友添加请求
	 *
	 * @return 返回ResponseEntity，包含查询结果和状态码
	 */
	@GetMapping("/friend/request")
	public ResponseEntity<?> queryAddRequest(@RequestParam String userId) {
		// 调用friendService的findRequest方法查询好友请求
		FriendQueryRequest friendQueryRequest = friendService.findRequest(userId);
		// 判断查询结果是否成功
		if (friendQueryRequest.getMessage()
			.equals("查询成功")) {
			// 如果查询成功，返回状态码200和查询结果
			return ResponseEntity.status(200)
				.body(friendQueryRequest);
		} else {
			// 如果查询失败，返回状态码404和查询结果
			return ResponseEntity.status(404)
				.body(friendQueryRequest);
		}
	}
	
	/**
	 * 添加好友的接口方法 通过POST请求接收好友请求信息
	 *
	 * @param friendRequest 包含好友请求信息的请求体
	 *
	 * @return 返回响应实体，包含状态码和响应信息
	 */
	@PostMapping("/friend/add")
	public ResponseEntity<?> addFriend(
		@RequestBody  // 请求体注解，表示将请求体内容映射到FriendRequest对象
		FriendRequest friendRequest) {
		// 调用服务层方法处理好友请求
		String result = friendService.sendRequestToSomeOne(friendRequest);
		// 判断处理结果
		if (result.equals("请求已发送")) {
			// 如果请求成功，返回200状态码和成功消息
			return ResponseEntity.status(200)
				.body(result);
		} else {
			// 如果请求失败，返回400状态码和错误消息
			return ResponseEntity.status(400)
				.body(result);
		}
	}
	
	/**
	 * 处理好友确认请求的接口方法
	 *
	 * @param friendRequest 包含好友请求信息的请求体，包含friendId和userId
	 *
	 * @return 返回ResponseEntity，包含状态码和响应信息
	 */
	@PostMapping("/friend/confirm")
	public ResponseEntity<?> confirmRequest(@RequestBody FriendRequest friendRequest) {
		// 调用friendService的confirmTwoWayFriend方法处理双向好友确认
		String result = friendService.confirmTwoWayFriend(
			friendRequest.getFriendId(),
			// 获取好友ID
			friendRequest.getUserId());    // 获取用户ID
		// 判断处理结果是否为"确认成功"
		if (result.equals("确认成功")) {
			// 如果确认成功，返回HTTP状态码200和成功信息
			return ResponseEntity.status(200)
				.body(result);
		} else {
			// 如果确认失败，返回HTTP状态码400和错误信息
			return ResponseEntity.status(400)
				.body(result);
		}
	}
	
	/**
	 * 删除好友的接口方法
	 *
	 * @param friendRequest 包含用户ID和好友ID的请求体
	 *
	 * @return 返回响应实体，包含状态码和操作结果信息
	 */
	@PostMapping("friend/del")
	public ResponseEntity<?> delFriend(@RequestBody FriendRequest friendRequest) {
		// 调用friendService的deleteFriend方法执行删除操作
		String result = friendService.deleteFriend(
			friendRequest.getUserId(),
			// 请求中的用户ID
			friendRequest.getFriendId()); // 请求中的好友ID
		// 判断操作结果
		if (result.equals("删除成功")) {
			// 如果删除成功，返回200状态码和成功信息
			return ResponseEntity.status(200)
				.body(result);
		} else {
			// 如果删除失败，返回400状态码和错误信息
			return ResponseEntity.status(400)
				.body(result);
		}
	}
}